package com.zrrd.learn.chapter08.Agent;

import java.lang.reflect.Field;

/**
 * 机器人
 *
 * @author asus
 * @version 1.0
 * @date 2023/8/5 8:44
 */
public class Robot {

    private String privateStr;
    String defaultStr;

    public String publicStr;

    protected String protectedStr;

//        getFields()获取公共属性
//            getDeclaredFields()获取全部属性
//        newInstance() 通过关联对象，产生原始对象的真实实例


    /**
     * 类的实例工厂
     *
     * @param cl
     * @return
     */
    public static Object getBeanByFactory(Class cl) {
        try {
            return cl.newInstance();
        } catch (InstantiationException | IllegalAccessException e) {
            throw new RuntimeException(e);
        }
    }


    public static void main(String[] args) {
        //1 ： 类的名称
        Class rebot = Robot.class;
        Object obj = null;
        try {
            obj = rebot.newInstance();
            //        rebot -- Rebot 关联对象
            Field[] fields = rebot.getDeclaredFields();

            //新型遍历方式  增强型for forEach
            for (Field f : fields) {
                if (f.getName().equals("publicStr")) {
                    f.set(obj, "我叫张三");
                } else {
                    f.set(obj, "我叫李四");
                }

                System.out.printf("字段名称为%s==>値为%s\n", f.getName(), f.get(obj));
//            f : 这个字段的关联对象  f 可以直接操作原始字段

//                System.out.println(f.getName());

            }
        } catch (InstantiationException | IllegalAccessException e) {
            throw new RuntimeException(e);
        }


        //2 : 一个类的实例


        //3: 类的路径


    }
}
